/*
    函数(方法):  
     function functionName([args]){
        // [return]
     }

     函数表达式(匿名函数)
*/

// 调用
console.log(square(8)); // 64

// 定义函数
function square(number) {
    console.log("square");
    return number * number;
}

// 调用函数
// let num = square(10);
// console.log(num);

// 都可以调用
// square(); // undefined
// square(5); // 25
// square("5"); // 25
// square("a"); // NaN
// square("a", "b"); // NaN


function myFunc(theObject) {
    theObject.name = "lisi";
}
// console.log(typeof myFunc);

// 对象 name 属性
const obj = { name: "zhangsan", age: 20 };

console.log(obj);
// console.log(obj.name); // 取值

let r = myFunc(obj);
// console.log(r); // undefined

console.log(obj);

obj.hobby = "篮球";

console.log(obj);

// 函数表达式
let f = function (number) {
    return number * number;
};

console.log(f);
console.log(f(5));



function out(a, b) {
    let c = 2;

    console.log(sum());

    function sum() {
        return a + b + f(5);
    }

}

// out(1, 2);


// 闭包
const pet = function (name) {

    const getName = function () {
        return name;
    }

    const setName = function (n) {
        name = n;
    }

    return { get: getName, set: setName };
}

petName = pet("喵");

// console.log(typeof petName);
// console.log(petName); // 喵

petName.set("咪");

console.log(petName.get()); // 咪

// document.write(petName)



function ff(a, b = 0) {
    // if (a == undefined) a = 0;
    // b = b == undefined ? 0 : b;
    // a = a || 0;

    return a + b;
}

console.log(ff());; // 0
// console.log(ff(1)); // 1
// console.log(ff(1, 2)); // 3


function xx(a, ...arg) {
    // console.log(arguments); // 参数列表
    // console.log(arg);

    for (num of arg) {
        console.log(num);
    }

}

// this 对象










